package com.example.demo.service.impl;

import com.example.demo.model.WebLink;
import com.example.demo.repository.WebLinkRepository;
import com.example.demo.service.WebLinkService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;

@Service
public class WebLinkServiceImpl implements WebLinkService {
    
    private final WebLinkRepository webLinkRepository;
    
    @Autowired
    public WebLinkServiceImpl(WebLinkRepository webLinkRepository) {
        this.webLinkRepository = webLinkRepository;
    }
    
    @Override
    @Transactional(readOnly = true)
    public List<WebLink> getAllWebLinks() {
        return webLinkRepository.findAllByOrderByDisplayOrderAsc();
    }
    
    @Override
    @Transactional(readOnly = true)
    public List<WebLink> getActiveWebLinks() {
        return webLinkRepository.findByActiveOrderByDisplayOrderAsc(true);
    }
    
    @Override
    @Transactional(readOnly = true)
    public Optional<WebLink> getWebLinkById(Long id) {
        return webLinkRepository.findById(id);
    }
    
    @Override
    @Transactional
    public WebLink saveWebLink(WebLink webLink) {
        // 确保URL格式正确
        if (webLink.getUrl() != null && !webLink.getUrl().isEmpty() &&
            !webLink.getUrl().startsWith("http://") && !webLink.getUrl().startsWith("https://")) {
            webLink.setUrl("https://" + webLink.getUrl());
        }
        
        // 如果没有设置图标，使用默认图标
        if (webLink.getIcon() == null || webLink.getIcon().isEmpty()) {
            webLink.setIcon("🔗");
        }
        
        return webLinkRepository.save(webLink);
    }
    
    @Override
    @Transactional
    public void deleteWebLink(Long id) {
        webLinkRepository.deleteById(id);
    }
    
    @Override
    @Transactional(readOnly = true)
    public List<WebLink> searchWebLinksByTitle(String title) {
        return webLinkRepository.findByTitleContainingIgnoreCase(title);
    }
    
    @Override
    @Transactional(readOnly = true)
    public List<WebLink> searchWebLinksByUrl(String url) {
        return webLinkRepository.findByUrlContainingIgnoreCase(url);
    }
    
    @Override
    @Transactional
    public void updateDisplayOrder(Long id, Integer newOrder) {
        Optional<WebLink> webLinkOpt = webLinkRepository.findById(id);
        if (webLinkOpt.isPresent()) {
            WebLink webLink = webLinkOpt.get();
            webLink.setDisplayOrder(newOrder);
            webLinkRepository.save(webLink);
        }
    }
    
    @Override
    @Transactional
    public void toggleActive(Long id) {
        Optional<WebLink> webLinkOpt = webLinkRepository.findById(id);
        if (webLinkOpt.isPresent()) {
            WebLink webLink = webLinkOpt.get();
            webLink.setActive(!webLink.getActive());
            webLinkRepository.save(webLink);
        }
    }
} 